package com.pai4j.user.controller;

import com.pai4j.common.bean.PAIResponseBean;
import com.pai4j.common.bean.PAIResponseBeanUtil;
import com.pai4j.common.enums.ResponseCodeEnum;
import com.pai4j.domain.vo.request.AccountRelationAnalyticsRequestVO;
import com.pai4j.domain.vo.response.AccountRelationAnalyticsVO;
import com.pai4j.remote.user.AccountRelationAnalyticsClient;
import com.pai4j.user.service.analytics.AccountRelationAnalyticsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

/**
 * 账号关系数据分析控制器
 * 提供粉丝和关注数据的统计分析接口
 *
 * @author PAI4J
 */
@Slf4j
@RestController
public class AccountRelationAnalyticsController implements AccountRelationAnalyticsClient {

    @Autowired
    private AccountRelationAnalyticsService analyticsService;

    /**
     * 获取账号关系数据分析报告
     * 包含粉丝和关注的多维度统计数据
     *
     * @param request 分析请求参数
     * @return 数据分析结果
     */
    @Override
    public PAIResponseBean<AccountRelationAnalyticsVO> getAnalytics(AccountRelationAnalyticsRequestVO request) {
        try {
            log.info("开始获取账号关系数据分析: account={}, days={}", request.getAccount(), request.getDays());
            AccountRelationAnalyticsVO analytics = analyticsService.getAnalytics(request);
            return PAIResponseBeanUtil.success(analytics);
        } catch (IllegalArgumentException e) {
            log.warn("获取账号关系数据分析参数错误: {}", e.getMessage());
            return PAIResponseBeanUtil.error(ResponseCodeEnum.ERROR.getCode(), e.getMessage());
        } catch (Exception e) {
            log.error("获取账号关系数据分析失败: account={}", request.getAccount(), e);
            return PAIResponseBeanUtil.error(ResponseCodeEnum.ERROR.getCode(),"数据分析失败: " + e.getMessage());
        }
    }

    /**
     * 快速获取账号关系数据分析（默认7天）
     *
     * @param account 用户账号
     * @return 数据分析结果
     */
    @Override
    public PAIResponseBean<AccountRelationAnalyticsVO> getQuickAnalytics(String account) {
        AccountRelationAnalyticsRequestVO request = AccountRelationAnalyticsRequestVO.builder()
                .account(account)
                .days(7)
                .includeCumulativeTrend(false)
                .build();
        return getAnalytics(request);
    }
}
